<?php
/**
 * @Author: king
 * @Last Modified by:   king
 * Date: 2018/6/8
 * Time: 14:10
 */
namespace App\Tools;


use App\Http\Controllers\Api\v1\Astro\DataController;

/**
 * 生时校正扩展类库
 * Class Rectification
 * @package App\Tools
 */
class Rectification
{
    /**
     * 检测有效事件数量
     * @param array $events 所有事件
     * @param int $birth_time 生时校正 时间范围的中间值
     * @param array $userinfo 用户信息（主要使用时区经纬度等信息）
     * @return array
     */
    public function getValidEvents($events = [],$birth_time = 0,$userinfo = [])
    {
        $ret = [];

        // 取用户输入的中点时间，逐一检测用户事件，是否在太阳弧上找到对应进程（0.5度容许）
        if(empty($events)) return $ret;

        foreach ($events as $i => $e)
        {
            // 是否填写 事件时间 和  事件类型  事件类型是否为以上18种
            if(!isset($e['time']) || !isset($e['type']) || $e['type'] < 1 || $e['type'] > 18)
            {
                continue;
            }

            $event_time = $e['time'] + 14.5 * 3600 * 24;// 计算月中15号中午12点

            $func = 'isEvent'.$e['type'].'Vaild';// 检测有效事件函数名

            $phase = $this->getAstroData($birth_time,$event_time,$userinfo);

            $isVaild = $this->$func($phase);

            $e['status'] = $isVaild;// 当前事件状态  0无效事件  0.5半有效事件  1有效事件

            $ret[] = $e;
        }
        return $ret;
    }
    /**
     * 开始生时校正，针对每一分钟检测事件状态
     * @param array $events 所有事件
     * @param int $birth_time 生时
     * @param array $userinfo 用户信息
     * @return array
     */
    public function getValidEventsScore($events = [],$birth_time = 0,$userinfo = [])
    {
        $ret = [];

        // 取用户输入的中点时间，逐一检测用户事件，是否在太阳弧上找到对应进程（0.5度容许）
        if(empty($events)) return $ret;

        $success = 0;
        $failed = 0;
        $total = 0;

        $per = 0;

        foreach ($events as $i => $e)
        {
            // 只检测有效事件
            if($e['status'] != 1) continue;

            // 是否填写 事件时间 和  事件类型  事件类型是否为以上17种
            if(!isset($e['time']) || !isset($e['type']) || $e['type'] < 1 || $e['type'] > 16)
            {
                continue;
            }

            $event_time = $e['time'] + 14.5 * 3600 * 24;// 计算月中15号中午12点

            $func = 'isEvent'.$e['type'].'Vaild';// 检测有效事件函数名

            $phase = $this->getAstroData($birth_time,$event_time,$userinfo,true);
            // 检测四轴点对应推进数
            $pro = $this->$func($phase,true);

            $e['num'] = $pro;// 对应进程数

            if($pro <= 0)
            {
                $failed ++;
            }
            else
            {
                $success+=$pro;
            }

        }
        $total = $success + $failed;

//        匹配度公式：70+5*（x-1）+（30-5*（x-1））/（n-x+1）
        $per = 70+5*($success-1) + (30-5*($success-1)) / ($total-$success+1);

        return round($per,1);
    }
    /**
     * 获取星盘相位数据
     * @param int $birth_time
     * @param int $event_time
     * @return array
     */
    protected function getAstroData($birth_time = 0,$event_time = 0,$userinfo = [],$in = false)
    {
        $timeinfo = [
            'year'=>date('Y',$birth_time),
            'month'=>date('m',$birth_time),
            'day'=>date('d',$birth_time),
            'hour'=>date('H',$birth_time),
            'minute'=>date('i',$birth_time),
        ];
        $timeinfo['timezone'] = $userinfo['timezone'];
        // 夏令时判断  （用户校正时间可能会变成夏令时时间）
        $timeinfo['is_summer'] = isSummerTime($timeinfo['hour'],$timeinfo['minute'],0,
            $timeinfo['month'],$timeinfo['day'],$timeinfo['year']) ? 1 : 0;
//        halt($timeinfo);
        $Data = new DataController();

        $timezone_summer_diff = ($timeinfo['timezone'] + $timeinfo['is_summer'] ) * 3600;

        $timestamp1 = $birth_time - $timezone_summer_diff;

        $longitude = ($userinfo['long_deg'] + $userinfo['long_min'] / 60 ) * $userinfo['ew'];
        $latitude = ($userinfo['lat_deg'] + $userinfo['lat_min'] / 60 ) * $userinfo['ns'];

        $timestamp2 = $event_time - $timezone_summer_diff;

        $birth_JD = gregoriantojd(date('m',$timestamp1), date('d',$timestamp1), date('Y',$timestamp1)) - 0.5 + ((date('H',$timestamp1) + (date('i',$timestamp1) / 60)) / 24);
        $start_JD = gregoriantojd(date('m',$timestamp2), date('d',$timestamp2), date('Y',$timestamp2)) - 0.5 + ((date('H',$timestamp2) + (date('i',$timestamp2) / 60)) / 24);
        $days_alive = $start_JD - $birth_JD; // 总天数
        $prog_time_to_add = $days_alive / 365.2422;// 365.2422  365.2421990  365.25

        $jd_to_use = $birth_JD + $prog_time_to_add;
        $utdatenow1 = strftime("%d.%m.%Y", $timestamp1);
        $utnow1 = strftime("%H:%M:%S", $timestamp1);

        $h_sys = 'p';

        $Data->planets_display = '111111111100000001001';
        $Data->asps_display = [0,45,90,135,180];
        $orb = 0.5;
        if($in === true) $orb = 0.2;// 检测出生时间事件是否符合  用0.2容许度
        $Data->asp_orb_all = ["0"=>$orb,"45"=>$orb,"90"=>$orb,"135"=>$orb,"180"=>$orb];
        $Data->planet_orb_all = [0,0,0,0,0,0,0,0,0,0];
        $exec_str1 = config('astrolog.prefix')." -b{$utdatenow1} -ut{$utnow1} -p0123456789DAmHt -eswe -house{$longitude},{$latitude},{$h_sys} -flds -g, -head";
        $exec_str2 = config('astrolog.prefix')." -bj{$jd_to_use} -ut -p0 -eswe -fl -g, -head";

        exec($exec_str1, $out1);
        exec($exec_str2, $out2);
//        \think\Log::write('星盘数据:'.var_export($out1,true),'log',true);

        $original_data1 = $Data->getOriginalData($out1,$h_sys);
        $Data->array_remove($original_data1,$Data->planets_display);

        $p_sun = $out2[0];
        $original_data2 = $Data->getTheLongitudeBySolarArc($p_sun, $original_data1);

        $phase1 = $Data->planetPkPlanet($original_data1, $original_data2, false, 1)['phase'];
        $phase2 = $Data->planetPkPlanet($original_data2, $original_data1, false, 2)['phase'];

        $ret = ['phase1'=>$phase1,'phase2'=>$phase2];

        return $ret;
    }
    /**
     * 判断荣誉奖励事件是否有效 1
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent1Vaild($phase = ['phase1'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 0 && $ps['id2'] == ASC)
                        || ($ps['id1'] == 0 && $ps['id2'] == MC)
                        || ($ps['id2'] == 0 && $ps['id1'] == ASC)
                        || ($ps['id2'] == 0 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 日月，日木，日升，日中天
                    if (
                        ($ps['id1'] == 0 && $ps['id2'] == 1)
                        || ($ps['id2'] == 0 && $ps['id1'] == 1)
                        || ($ps['id1'] == 0 && $ps['id2'] == 5)
                        || ($ps['id2'] == 0 && $ps['id1'] == 5)
                        || ($ps['id1'] == 0 && $ps['id2'] == ASC)
                        || ($ps['id1'] == 0 && $ps['id2'] == MC)
                        || ($ps['id2'] == 0 && $ps['id1'] == ASC)
                        || ($ps['id2'] == 0 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断父亲喜事事件是否有效 2
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent2Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(
                        ($ps['id1'] == 0 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 0 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 0 && $ps['id2'] == MC)
                        || ($ps['id2'] == 0 && $ps['id1'] == MC)
                        || ($ps['id1'] == 3 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 3 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 5 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                        // 20180709 add by seunk
                        || ($ps['id1'] == 1 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 1 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 1 && $ps['id2'] == MC)
                        || ($ps['id2'] == 1 && $ps['id1'] == MC)
                    )
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 日月，日木，日金，日升，日中天，木中天，金中天
                    if(
                        ($ps['id1'] == 0 && $ps['id2'] == 1)
                        || ($ps['id2'] == 0 && $ps['id1'] == 1)
                        || ($ps['id1'] == 0 && $ps['id2'] == 5)
                        || ($ps['id2'] == 0 && $ps['id1'] == 5)
                        || ($ps['id1'] == 0 && $ps['id2'] == 3)
                        || ($ps['id2'] == 0 && $ps['id1'] == 3)
                        || ($ps['id1'] == 0 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 0 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 0 && $ps['id2'] == MC)
                        || ($ps['id2'] == 0 && $ps['id1'] == MC)
                        || ($ps['id1'] == 3 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 3 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 5 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                        // 20180709 add by seunk   + 月木、月金、月中天、月上升
                        || ($ps['id1'] == 1 && $ps['id2'] == 5)
                        || ($ps['id2'] == 1 && $ps['id1'] == 5)
                        || ($ps['id1'] == 1 && $ps['id2'] == 3)
                        || ($ps['id2'] == 1 && $ps['id1'] == 3)
                        || ($ps['id1'] == 1 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 1 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 1 && $ps['id2'] == MC)
                        || ($ps['id2'] == 1 && $ps['id1'] == MC)
                    )
                    {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if($ps['id1'] == 1 || $ps['id2'] == 1)
                    {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if($ps['id1'] >= 17 || $ps['id2'] >= 17)
                    {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断父亲灾病事件是否有效 3
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent3Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                        || ($ps['id1'] == 6 && $ps['id2'] == MC)
                        || ($ps['id2'] == 6 && $ps['id1'] == MC)
                        || ($ps['id1'] == 8 && $ps['id2'] == MC)
                        || ($ps['id2'] == 8 && $ps['id1'] == MC)
                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
                        || ($ps['id2'] == 9 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 日土，日海，日火，日冥，火中天，土中天，海中天，冥中天
                    if (
                        ($ps['id1'] == 0 && $ps['id2'] == 6)
                        || ($ps['id2'] == 0 && $ps['id1'] == 6)
                        || ($ps['id1'] == 0 && $ps['id2'] == 8)
                        || ($ps['id2'] == 0 && $ps['id1'] == 8)
                        || ($ps['id1'] == 0 && $ps['id2'] == 4)
                        || ($ps['id2'] == 0 && $ps['id1'] == 4)
                        || ($ps['id1'] == 0 && $ps['id2'] == 9)
                        || ($ps['id2'] == 0 && $ps['id1'] == 9)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                        || ($ps['id1'] == 6 && $ps['id2'] == MC)
                        || ($ps['id2'] == 6 && $ps['id1'] == MC)
                        || ($ps['id1'] == 8 && $ps['id2'] == MC)
                        || ($ps['id2'] == 8 && $ps['id1'] == MC)
                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
                        || ($ps['id2'] == 9 && $ps['id1'] == MC)
                        // 20180709 add by seunk 月土、月海、月火、月冥
                        || ($ps['id1'] == 1 && $ps['id2'] == 6)
                        || ($ps['id2'] == 1 && $ps['id1'] == 6)
                        || ($ps['id1'] == 1 && $ps['id2'] == 8)
                        || ($ps['id2'] == 1 && $ps['id1'] == 8)
                        || ($ps['id1'] == 1 && $ps['id2'] == 4)
                        || ($ps['id2'] == 1 && $ps['id1'] == 4)
                        || ($ps['id1'] == 1 && $ps['id2'] == 9)
                        || ($ps['id2'] == 1 && $ps['id1'] == 9)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断自己灾病事件是否有效 4
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent4Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 6 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 6 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 8 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 8 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 9 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 9 && $ps['id1'] == ASC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 日土，日火，月土，月火，日海，日冥，月海，月冥，火升，土升，海升，冥升
                    if (
                        ($ps['id1'] == 0 && $ps['id2'] == 6)
                        || ($ps['id2'] == 0 && $ps['id1'] == 6)
                        || ($ps['id1'] == 0 && $ps['id2'] == 4)
                        || ($ps['id2'] == 0 && $ps['id1'] == 4)
                        || ($ps['id1'] == 1 && $ps['id2'] == 6)
                        || ($ps['id2'] == 1 && $ps['id1'] == 6)
                        || ($ps['id1'] == 1 && $ps['id2'] == 4)
                        || ($ps['id2'] == 1 && $ps['id1'] == 4)
                        || ($ps['id1'] == 0 && $ps['id2'] == 8)
                        || ($ps['id2'] == 0 && $ps['id1'] == 8)
                        || ($ps['id1'] == 0 && $ps['id2'] == 9)
                        || ($ps['id2'] == 0 && $ps['id1'] == 9)
                        || ($ps['id1'] == 1 && $ps['id2'] == 8)
                        || ($ps['id2'] == 1 && $ps['id1'] == 8)
                        || ($ps['id1'] == 1 && $ps['id2'] == 9)
                        || ($ps['id2'] == 1 && $ps['id1'] == 9)
                        || ($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 6 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 6 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 8 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 8 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 9 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 9 && $ps['id1'] == ASC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断母亲喜事事件是否有效 5
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent5Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 1 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 1 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 月金，月木，月中天，月上升，木中天，金中天
                    if(
                        ($ps['id1'] == 1 && $ps['id2'] == 3)
                        || ($ps['id2'] == 1 && $ps['id1'] == 3)
                        || ($ps['id1'] == 1 && $ps['id2'] == 5)
                        || ($ps['id2'] == 1 && $ps['id1'] == 5)
                        || ($ps['id1'] == 1 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 1 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                    )
                    {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if($ps['id1'] == 1 || $ps['id2'] == 1)
                    {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if($ps['id1'] >= 17 || $ps['id2'] >= 17)
                    {
                        $axis_phase++;
                    }
                }

            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断母亲灾病事件是否有效 6
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent6Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                        || ($ps['id1'] == 6 && $ps['id2'] == MC)
                        || ($ps['id2'] == 6 && $ps['id1'] == MC)
                        || ($ps['id1'] == 8 && $ps['id2'] == MC)
                        || ($ps['id2'] == 8 && $ps['id1'] == MC)
                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
                        || ($ps['id2'] == 9 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 月火，月土，月海，月冥，火中天，土中天，海中天，冥中天
                    if (
                        ($ps['id1'] == 1 && $ps['id2'] == 4)
                        || ($ps['id2'] == 1 && $ps['id1'] == 4)
                        || ($ps['id1'] == 1 && $ps['id2'] == 6)
                        || ($ps['id2'] == 1 && $ps['id1'] == 6)
                        || ($ps['id1'] == 1 && $ps['id2'] == 8)
                        || ($ps['id2'] == 1 && $ps['id1'] == 8)
                        || ($ps['id1'] == 1 && $ps['id2'] == 9)
                        || ($ps['id2'] == 1 && $ps['id1'] == 9)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                        || ($ps['id1'] == 6 && $ps['id2'] == MC)
                        || ($ps['id2'] == 6 && $ps['id1'] == MC)
                        || ($ps['id1'] == 8 && $ps['id2'] == MC)
                        || ($ps['id2'] == 8 && $ps['id1'] == MC)
                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
                        || ($ps['id2'] == 9 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断迁移搬家事件是否有效 7
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent7Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 7 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 7 && $ps['id2'] == MC)
                        || ($ps['id2'] == 7 && $ps['id1'] == MC)
                        || ($ps['id1'] == 1 && $ps['id2'] == MC)
                        || ($ps['id2'] == 1 && $ps['id1'] == MC)
                        || ($ps['id1'] == 2 && $ps['id2'] == MC)
                        || ($ps['id2'] == 2 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 月天，天上升，天中天，日天，月中天，水中天，木中天，月木，月水
                    if (
                        ($ps['id1'] == 1 && $ps['id2'] == 7)
                        || ($ps['id2'] == 1 && $ps['id1'] == 7)
                        || ($ps['id1'] == 7 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 7 && $ps['id2'] == MC)
                        || ($ps['id2'] == 7 && $ps['id1'] == MC)
                        || ($ps['id1'] == 0 && $ps['id2'] == 7)
                        || ($ps['id2'] == 0 && $ps['id1'] == 7)
                        || ($ps['id1'] == 1 && $ps['id2'] == MC)
                        || ($ps['id2'] == 1 && $ps['id1'] == MC)
                        || ($ps['id1'] == 2 && $ps['id2'] == MC)
                        || ($ps['id2'] == 2 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                        || ($ps['id1'] == 1 && $ps['id2'] == 5)
                        || ($ps['id2'] == 1 && $ps['id1'] == 5)
                        || ($ps['id1'] == 1 && $ps['id2'] == 2)
                        || ($ps['id2'] == 1 && $ps['id1'] == 2)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断家庭变故事件是否有效 8
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent8Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                        || ($ps['id1'] == 6 && $ps['id2'] == MC)
                        || ($ps['id2'] == 6 && $ps['id1'] == MC)
                        || ($ps['id1'] == 8 && $ps['id2'] == MC)
                        || ($ps['id2'] == 8 && $ps['id1'] == MC)
                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
                        || ($ps['id2'] == 9 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 火土海冥/中天  火土海冥/月
                    if (
                        ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                        || ($ps['id1'] == 6 && $ps['id2'] == MC)
                        || ($ps['id2'] == 6 && $ps['id1'] == MC)
                        || ($ps['id1'] == 8 && $ps['id2'] == MC)
                        || ($ps['id2'] == 8 && $ps['id1'] == MC)
                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
                        || ($ps['id2'] == 9 && $ps['id1'] == MC)
                        || ($ps['id1'] == 4 && $ps['id2'] == 1)
                        || ($ps['id2'] == 4 && $ps['id1'] == 1)
                        || ($ps['id1'] == 6 && $ps['id2'] == 1)
                        || ($ps['id2'] == 6 && $ps['id1'] == 1)
                        || ($ps['id1'] == 8 && $ps['id2'] == 1)
                        || ($ps['id2'] == 8 && $ps['id1'] == 1)
                        || ($ps['id1'] == 9 && $ps['id2'] == 1)
                        || ($ps['id2'] == 9 && $ps['id1'] == 1)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断婚恋桃花事件是否有效 9
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent9Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == ASC && $ps['id2'] == 3)
                        || ($ps['id2'] == ASC && $ps['id1'] == 3)
                        || ($ps['id1'] == MC && $ps['id2'] == 3)
                        || ($ps['id2'] == MC && $ps['id1'] == 3))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 日月火木/金，上升金，中天金
                    if (
                        ($ps['id1'] == 0 && $ps['id2'] == 3)
                        || ($ps['id2'] == 0 && $ps['id1'] == 3)
                        || ($ps['id1'] == 1 && $ps['id2'] == 3)
                        || ($ps['id2'] == 1 && $ps['id1'] == 3)
                        || ($ps['id1'] == 4 && $ps['id2'] == 3)
                        || ($ps['id2'] == 4 && $ps['id1'] == 3)
                        || ($ps['id1'] == 5 && $ps['id2'] == 3)
                        || ($ps['id2'] == 5 && $ps['id1'] == 3)
                        || ($ps['id1'] == ASC && $ps['id2'] == 3)
                        || ($ps['id2'] == ASC && $ps['id1'] == 3)
                        || ($ps['id1'] == MC && $ps['id2'] == 3)
                        || ($ps['id2'] == MC && $ps['id1'] == 3)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断关系变化事件是否有效 10
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent10Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 7 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 7 && $ps['id1'] == ASC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 金天，月天，金冥，金海，天上升
                    if (
                        ($ps['id1'] == 3 && $ps['id2'] == 7)
                        || ($ps['id2'] == 3 && $ps['id1'] == 7)
                        || ($ps['id1'] == 1 && $ps['id2'] == 7)
                        || ($ps['id2'] == 1 && $ps['id1'] == 7)
                        || ($ps['id1'] == 3 && $ps['id2'] == 9)
                        || ($ps['id2'] == 3 && $ps['id1'] == 9)
                        || ($ps['id1'] == 3 && $ps['id2'] == 8)
                        || ($ps['id2'] == 3 && $ps['id1'] == 8)
                        || ($ps['id1'] == 7 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断失恋离婚事件是否有效 11
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent11Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 7 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 9 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 9 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 8 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 8 && $ps['id1'] == ASC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 金天，天上升，金冥，冥上升，金海，海上升
                    if (
                        ($ps['id1'] == 3 && $ps['id2'] == 7)
                        || ($ps['id2'] == 3 && $ps['id1'] == 7)
                        || ($ps['id1'] == 7 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == 9)
                        || ($ps['id2'] == 3 && $ps['id1'] == 9)
                        || ($ps['id1'] == 9 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 9 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == 8)
                        || ($ps['id2'] == 3 && $ps['id1'] == 8)
                        || ($ps['id1'] == 8 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 8 && $ps['id1'] == ASC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
//    /**
//     * 判断升学转学事件是否有效 12
//     * @param array $phase 相位
//     * @return int
//     */
//    protected function isEvent12Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
//    {
//        $ret = 0;
//        $vaild_phase= 0;// 对应进程数量
//        $moon_phase = 0;// 与月亮有关进程数
//        $axis_phase = 0;// 与轴点有关进程数
//        $only_axis_phase = 0;
//        if(!empty($phase['phase1']))
//        {
//            foreach ($phase['phase1'] as $ps)
//            {
//                if($only_axis === true )
//                {
//                    if(($ps['id1'] == 2 && $ps['id2'] == ASC)
//                        || ($ps['id2'] == 2 && $ps['id1'] == ASC)
//                        || ($ps['id1'] == 2 && $ps['id2'] == MC)
//                        || ($ps['id2'] == 2 && $ps['id1'] == MC))
//                    {
//                        $only_axis_phase++;
//                    }
//                }
//                else
//                {
//                    // 水/日月金木天，水/上升中天
//                    if (
//                        ($ps['id1'] == 2 && $ps['id2'] == 0)
//                        || ($ps['id2'] == 2 && $ps['id1'] == 0)
//                        || ($ps['id1'] == 2 && $ps['id2'] == 1)
//                        || ($ps['id2'] == 2 && $ps['id1'] == 1)
//                        || ($ps['id1'] == 2 && $ps['id2'] == 3)
//                        || ($ps['id2'] == 2 && $ps['id1'] == 3)
//                        || ($ps['id1'] == 2 && $ps['id2'] == 5)
//                        || ($ps['id2'] == 2 && $ps['id1'] == 5)
//                        || ($ps['id1'] == 2 && $ps['id2'] == 7)
//                        || ($ps['id2'] == 2 && $ps['id1'] == 7)
//                        || ($ps['id1'] == 2 && $ps['id2'] == ASC)
//                        || ($ps['id2'] == 2 && $ps['id1'] == ASC)
//                        || ($ps['id1'] == 2 && $ps['id2'] == MC)
//                        || ($ps['id2'] == 2 && $ps['id1'] == MC)
//                    ) {
//                        $vaild_phase++;
//                    }
//                    // 与月亮有关的进程
//                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
//                        $moon_phase++;
//                    }
//                    // 与轴点有关的相位
//                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
//                        $axis_phase++;
//                    }
//                }
//            }
//        }
//        // 生时校正时，只看轴点相关进程
//        if($only_axis === true)
//        {
//            return $only_axis_phase;
//        }
//        // 找不到对应进程 || 进程都与轴点有关
//        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
//        {
//            return 1;
//        }
//        // 进程都与月亮有关
//        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
//        {
//            return 0.5;
//        }
//
//        return $ret;
//    }
    /**
     * 判断学业问题事件是否有效 12
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent12Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 2 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 2 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 2 && $ps['id2'] == MC)
                        || ($ps['id2'] == 2 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 水/火土海冥，水上升，水中天
                    if (
                        ($ps['id1'] == 2 && $ps['id2'] == 4)
                        || ($ps['id2'] == 2 && $ps['id1'] == 4)
                        || ($ps['id1'] == 2 && $ps['id2'] == 6)
                        || ($ps['id2'] == 2 && $ps['id1'] == 6)
                        || ($ps['id1'] == 2 && $ps['id2'] == 8)
                        || ($ps['id2'] == 2 && $ps['id1'] == 8)
                        || ($ps['id1'] == 2 && $ps['id2'] == 9)
                        || ($ps['id2'] == 2 && $ps['id1'] == 9)
                        || ($ps['id1'] == 2 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 2 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 2 && $ps['id2'] == MC)
                        || ($ps['id2'] == 2 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断意外伤灾事件是否有效 13
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent13Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 火/日月水木天上升中天
                    if (
                        ($ps['id1'] == 4 && $ps['id2'] == 0)
                        || ($ps['id2'] == 4 && $ps['id1'] == 0)
                        || ($ps['id1'] == 4 && $ps['id2'] == 1)
                        || ($ps['id2'] == 4 && $ps['id1'] == 1)
                        || ($ps['id1'] == 4 && $ps['id2'] == 2)
                        || ($ps['id2'] == 4 && $ps['id1'] == 2)
                        || ($ps['id1'] == 4 && $ps['id2'] == 5)
                        || ($ps['id2'] == 4 && $ps['id1'] == 5)
                        || ($ps['id1'] == 4 && $ps['id2'] == 7)
                        || ($ps['id2'] == 4 && $ps['id1'] == 7)
                        || ($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断暴力事件事件是否有效 14
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent14Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 火星/日月金木天海冥上升中天
                    if (
                        ($ps['id1'] == 4 && $ps['id2'] == 0)
                        || ($ps['id2'] == 4 && $ps['id1'] == 0)
                        || ($ps['id1'] == 4 && $ps['id2'] == 1)
                        || ($ps['id2'] == 4 && $ps['id1'] == 1)
                        || ($ps['id1'] == 4 && $ps['id2'] == 3)
                        || ($ps['id2'] == 4 && $ps['id1'] == 3)
                        || ($ps['id1'] == 4 && $ps['id2'] == 5)
                        || ($ps['id2'] == 4 && $ps['id1'] == 5)
                        || ($ps['id1'] == 4 && $ps['id2'] == 7)
                        || ($ps['id2'] == 4 && $ps['id1'] == 7)
                        || ($ps['id1'] == 4 && $ps['id2'] == 8)
                        || ($ps['id2'] == 4 && $ps['id1'] == 8)
                        || ($ps['id1'] == 4 && $ps['id2'] == 9)
                        || ($ps['id2'] == 4 && $ps['id1'] == 9)
                        || ($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断情色灾难事件是否有效 15
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent15Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 火/日月金木海冥上升中天
                    if (
                        ($ps['id1'] == 4 && $ps['id2'] == 0)
                        || ($ps['id2'] == 4 && $ps['id1'] == 0)
                        || ($ps['id1'] == 4 && $ps['id2'] == 1)
                        || ($ps['id2'] == 4 && $ps['id1'] == 1)
                        || ($ps['id1'] == 4 && $ps['id2'] == 3)
                        || ($ps['id2'] == 4 && $ps['id1'] == 3)
                        || ($ps['id1'] == 4 && $ps['id2'] == 5)
                        || ($ps['id2'] == 4 && $ps['id1'] == 5)
                        || ($ps['id1'] == 4 && $ps['id2'] == 8)
                        || ($ps['id2'] == 4 && $ps['id1'] == 8)
                        || ($ps['id1'] == 4 && $ps['id2'] == 9)
                        || ($ps['id2'] == 4 && $ps['id1'] == 9)
                        || ($ps['id1'] == 4 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 4 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 4 && $ps['id2'] == MC)
                        || ($ps['id2'] == 4 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
//    /**
//     * 判断人生巨变事件是否有效 17
//     * @param array $phase 相位
//     * @return int
//     */
//    protected function isEvent17Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
//    {
//        $ret = 0;
//        $vaild_phase= 0;// 对应进程数量
//        $moon_phase = 0;// 与月亮有关进程数
//        $axis_phase = 0;// 与轴点有关进程数
//        $only_axis_phase = 0;
//        if(!empty($phase['phase1']))
//        {
//            foreach ($phase['phase1'] as $ps)
//            {
//                if($only_axis === true )
//                {
//                    if(($ps['id1'] == 7 && $ps['id2'] == ASC)
//                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
//                        || ($ps['id1'] == 7 && $ps['id2'] == MC)
//                        || ($ps['id2'] == 7 && $ps['id1'] == MC)
//                        || ($ps['id1'] == 9 && $ps['id2'] == ASC)
//                        || ($ps['id2'] == 9 && $ps['id1'] == ASC)
//                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
//                        || ($ps['id2'] == 9 && $ps['id1'] == MC))
//                    {
//                        $only_axis_phase++;
//                    }
//                }
//                else
//                {
//                    // 天上升，天中天，冥上升，冥中天，日天，月天，日冥，月冥
//                    if (
//                        ($ps['id1'] == 7 && $ps['id2'] == ASC)
//                        || ($ps['id2'] == 7 && $ps['id1'] == ASC)
//                        || ($ps['id1'] == 7 && $ps['id2'] == MC)
//                        || ($ps['id2'] == 7 && $ps['id1'] == MC)
//                        || ($ps['id1'] == 9 && $ps['id2'] == ASC)
//                        || ($ps['id2'] == 9 && $ps['id1'] == ASC)
//                        || ($ps['id1'] == 9 && $ps['id2'] == MC)
//                        || ($ps['id2'] == 9 && $ps['id1'] == MC)
//                        || ($ps['id1'] == 0 && $ps['id2'] == 7)
//                        || ($ps['id2'] == 0 && $ps['id1'] == 7)
//                        || ($ps['id1'] == 1 && $ps['id2'] == 7)
//                        || ($ps['id2'] == 1 && $ps['id1'] == 7)
//                        || ($ps['id1'] == 0 && $ps['id2'] == 9)
//                        || ($ps['id2'] == 0 && $ps['id1'] == 9)
//                        || ($ps['id1'] == 1 && $ps['id2'] == 9)
//                        || ($ps['id2'] == 1 && $ps['id1'] == 9)
//                    ) {
//                        $vaild_phase++;
//                    }
//                    // 与月亮有关的进程
//                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
//                        $moon_phase++;
//                    }
//                    // 与轴点有关的相位
//                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
//                        $axis_phase++;
//                    }
//                }
//            }
//        }
//        // 生时校正时，只看轴点相关进程
//        if($only_axis === true)
//        {
//            return $only_axis_phase;
//        }
//        // 找不到对应进程 || 进程都与轴点有关
//        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
//        {
//            return 1;
//        }
//        // 进程都与月亮有关
//        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
//        {
//            return 0.5;
//        }
//
//        return $ret;
//    }
    /**
     * 判断生育子女事件是否有效 16
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent16Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(
                        ($ps['id1'] == 3 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 3 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 5 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                    )
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 金/月日中天上升 木/月金日中天上升 日/月金木
                    if (
                        ($ps['id1'] == 3 && $ps['id2'] == 1)
                        || ($ps['id2'] == 3 && $ps['id1'] == 1)
                        || ($ps['id1'] == 3 && $ps['id2'] == 0)
                        || ($ps['id2'] == 3 && $ps['id1'] == 0)
                        || ($ps['id1'] == 3 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 3 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == 1)
                        || ($ps['id2'] == 5 && $ps['id1'] == 1)
                        || ($ps['id1'] == 5 && $ps['id2'] == 3)
                        || ($ps['id2'] == 5 && $ps['id1'] == 3)
                        || ($ps['id1'] == 5 && $ps['id2'] == 0)
                        || ($ps['id2'] == 5 && $ps['id1'] == 0)
                        || ($ps['id1'] == 5 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 5 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                        || ($ps['id1'] == 0 && $ps['id2'] == 1)
                        || ($ps['id2'] == 0 && $ps['id1'] == 1)
                        || ($ps['id1'] == 0 && $ps['id2'] == 3)
                        || ($ps['id2'] == 0 && $ps['id1'] == 3)
                        || ($ps['id1'] == 0 && $ps['id2'] == 5)
                        || ($ps['id2'] == 0 && $ps['id1'] == 5)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断财富增长事件是否有效 17
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent17Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 3 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 3 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 5 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                    )
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 金星/中天上升日月木水 木星/中天上升日月金
                    if (
                        ($ps['id1'] == 3 && $ps['id2'] == 0)
                        || ($ps['id2'] == 3 && $ps['id1'] == 0)
                        || ($ps['id1'] == 3 && $ps['id2'] == 1)
                        || ($ps['id2'] == 3 && $ps['id1'] == 1)
                        || ($ps['id1'] == 3 && $ps['id2'] == 2)
                        || ($ps['id2'] == 3 && $ps['id1'] == 2)
                        || ($ps['id1'] == 3 && $ps['id2'] == 5)
                        || ($ps['id2'] == 3 && $ps['id1'] == 5)
                        || ($ps['id1'] == 3 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 3 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == 0)
                        || ($ps['id2'] == 5 && $ps['id1'] == 0)
                        || ($ps['id1'] == 5 && $ps['id2'] == 1)
                        || ($ps['id2'] == 5 && $ps['id1'] == 1)
                        || ($ps['id1'] == 5 && $ps['id2'] == 3)
                        || ($ps['id2'] == 5 && $ps['id1'] == 3)
                        || ($ps['id1'] == 5 && $ps['id2'] == ASC)
                        || ($ps['id2'] == 5 && $ps['id1'] == ASC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
    /**
     * 判断创业升值事件是否有效 18
     * @param array $phase 相位
     * @return int
     */
    protected function isEvent18Vaild($phase = ['phase'=>[],'phase2'=>[]],$only_axis = false)
    {
        $ret = 0;
        $vaild_phase= 0;// 对应进程数量
        $moon_phase = 0;// 与月亮有关进程数
        $axis_phase = 0;// 与轴点有关进程数
        $only_axis_phase = 0;
        if(!empty($phase['phase1']))
        {
            foreach ($phase['phase1'] as $ps)
            {
                if($only_axis === true )
                {
                    if(($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                        || ($ps['id1'] == 0 && $ps['id2'] == MC)
                        || ($ps['id2'] == 0 && $ps['id1'] == MC)
                        || ($ps['id1'] == MC && $ps['id2'] == 5)
                        || ($ps['id2'] == MC && $ps['id1'] == 5))
                    {
                        $only_axis_phase++;
                    }
                }
                else
                {
                    // 金木日/中天 中天日/木
                    if (
                        ($ps['id1'] == 3 && $ps['id2'] == MC)
                        || ($ps['id2'] == 3 && $ps['id1'] == MC)
                        || ($ps['id1'] == 5 && $ps['id2'] == MC)
                        || ($ps['id2'] == 5 && $ps['id1'] == MC)
                        || ($ps['id1'] == 0 && $ps['id2'] == MC)
                        || ($ps['id2'] == 0 && $ps['id1'] == MC)
                        || ($ps['id1'] == MC && $ps['id2'] == 5)
                        || ($ps['id2'] == MC && $ps['id1'] == 5)
                        || ($ps['id1'] == 0 && $ps['id2'] == 5)
                        || ($ps['id2'] == 0 && $ps['id1'] == 5)
                    ) {
                        $vaild_phase++;
                    }
                    // 与月亮有关的进程
                    if ($ps['id1'] == 1 || $ps['id2'] == 1) {
                        $moon_phase++;
                    }
                    // 与轴点有关的相位
                    if ($ps['id1'] >= 17 || $ps['id2'] >= 17) {
                        $axis_phase++;
                    }
                }
            }
        }
        // 生时校正时，只看轴点相关进程
        if($only_axis === true)
        {
            return $only_axis_phase;
        }
        // 找不到对应进程 || 进程都与轴点有关
        if($vaild_phase == 0 || (count($phase['phase1']) > 0 && count($phase['phase1']) == $axis_phase))
        {
            return 1;
        }
        // 进程都与月亮有关
        if($moon_phase > 0 && count($phase['phase1']) == $moon_phase)
        {
            return 0.5;
        }

        return $ret;
    }
}
